home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / PIL / PdfImagePlugin.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  122 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __version__ = '0.4'
  5. import Image
  6. import ImageFile
  7. import StringIO
  8.  
  9. def _obj(fp, obj, **dict):
  10.     fp.write('%d 0 obj\n' % obj)
  11.     if dict:
  12.         fp.write('<<\n')
  13.         for k, v in dict.items():
  14.             if v is not None:
  15.                 fp.write('/%s %s\n' % (k, v))
  16.                 continue
  17.         
  18.         fp.write('>>\n')
  19.     
  20.  
  21.  
  22. def _endobj(fp):
  23.     fp.write('endobj\n')
  24.  
  25.  
  26. def _save(im, fp, filename):
  27.     im.load()
  28.     xref = [
  29.         0] * 6
  30.     fp.write('%PDF-1.2\n')
  31.     fp.write('% created by PIL PDF driver ' + __version__ + '\n')
  32.     (width, height) = im.size
  33.     bits = 8
  34.     params = None
  35.     if im.mode == '1':
  36.         filter = '/ASCIIHexDecode'
  37.         colorspace = '/DeviceGray'
  38.         procset = '/ImageB'
  39.         bits = 1
  40.     elif im.mode == 'L':
  41.         filter = '/DCTDecode'
  42.         colorspace = '/DeviceGray'
  43.         procset = '/ImageB'
  44.     elif im.mode == 'P':
  45.         filter = '/ASCIIHexDecode'
  46.         colorspace = '[ /Indexed /DeviceRGB 255 <'
  47.         palette = im.im.getpalette('RGB')
  48.         for i in range(256):
  49.             r = ord(palette[i * 3])
  50.             g = ord(palette[i * 3 + 1])
  51.             b = ord(palette[i * 3 + 2])
  52.             colorspace = colorspace + '%02x%02x%02x ' % (r, g, b)
  53.         
  54.         colorspace = colorspace + '> ]'
  55.         procset = '/ImageI'
  56.     elif im.mode == 'RGB':
  57.         filter = '/DCTDecode'
  58.         colorspace = '/DeviceRGB'
  59.         procset = '/ImageC'
  60.     elif im.mode == 'CMYK':
  61.         filter = '/DCTDecode'
  62.         colorspace = '/DeviceCMYK'
  63.         procset = '/ImageC'
  64.     else:
  65.         raise ValueError('cannot save mode %s' % im.mode)
  66.     xref[1] = fp.tell()
  67.     _obj(fp, 1, Type = '/Catalog', Pages = '2 0 R')
  68.     _endobj(fp)
  69.     xref[2] = fp.tell()
  70.     _obj(fp, 2, Type = '/Pages', Count = 1, Kids = '[4 0 R]')
  71.     _endobj(fp)
  72.     op = StringIO.StringIO()
  73.     if filter == '/ASCIIHexDecode':
  74.         if bits == 1:
  75.             data = im.tostring('raw', '1')
  76.             im = Image.new('L', (len(data), 1), None)
  77.             im.putdata(data)
  78.         
  79.         ImageFile._save(im, op, [
  80.             ('hex', (0, 0) + im.size, 0, im.mode)])
  81.     elif filter == '/DCTDecode':
  82.         ImageFile._save(im, op, [
  83.             ('jpeg', (0, 0) + im.size, 0, im.mode)])
  84.     elif filter == '/FlateDecode':
  85.         ImageFile._save(im, op, [
  86.             ('zip', (0, 0) + im.size, 0, im.mode)])
  87.     elif filter == '/RunLengthDecode':
  88.         ImageFile._save(im, op, [
  89.             ('packbits', (0, 0) + im.size, 0, im.mode)])
  90.     else:
  91.         raise ValueError('unsupported PDF filter (%s)' % filter)
  92.     xref[3] = fp.tell()
  93.     _obj(fp, 3, Type = '/XObject', Subtype = '/Image', Width = width, Height = height, Length = len(op.getvalue()), Filter = filter, BitsPerComponent = bits, DecodeParams = params, ColorSpace = colorspace)
  94.     fp.write('stream\n')
  95.     fp.write(op.getvalue())
  96.     fp.write('\nendstream\n')
  97.     _endobj(fp)
  98.     xref[4] = fp.tell()
  99.     _obj(fp, 4)
  100.     fp.write('<<\n/Type /Page\n/Parent 2 0 R\n/Resources <<\n/ProcSet [ /PDF %s ]\n/XObject << /image 3 0 R >>\n>>\n/MediaBox [ 0 0 %d %d ]\n/Contents 5 0 R\n>>\n' % (procset, width, height))
  101.     _endobj(fp)
  102.     op = StringIO.StringIO()
  103.     op.write('q %d 0 0 %d 0 0 cm /image Do Q\n' % (width, height))
  104.     xref[5] = fp.tell()
  105.     _obj(fp, 5, Length = len(op.getvalue()))
  106.     fp.write('stream\n')
  107.     fp.write(op.getvalue())
  108.     fp.write('\nendstream\n')
  109.     _endobj(fp)
  110.     startxref = fp.tell()
  111.     fp.write('xref\n0 %d\n0000000000 65535 f \n' % len(xref))
  112.     for x in xref[1:]:
  113.         fp.write('%010d 00000 n \n' % x)
  114.     
  115.     fp.write('trailer\n<<\n/Size %d\n/Root 1 0 R\n>>\n' % len(xref))
  116.     fp.write('startxref\n%d\n%%%%EOF\n' % startxref)
  117.     fp.flush()
  118.  
  119. Image.register_save('PDF', _save)
  120. Image.register_extension('PDF', '.pdf')
  121. Image.register_mime('PDF', 'application/pdf')
  122.